package com.whfc.fse.dao;

import com.whfc.fse.dto.FseWarnCountDTO;
import com.whfc.fse.dto.FseWarnRecordDTO;
import com.whfc.fse.entity.FseWarn;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

@Repository
public interface FseWarnMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(FseWarn record);

    int insertSelective(FseWarn record);

    FseWarn selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(FseWarn record);

    int updateByPrimaryKey(FseWarn record);

    List<FseWarnRecordDTO> selectByDeptId(@Param("deptIds") List<Integer> deptIds,
                                          @Param("state") Integer state,
                                          @Param("ruleType") Integer ruleType,
                                          @Param("type") Integer type,
                                          @Param("startTime") Date startTime,
                                          @Param("endTime") Date endTime);

    /**
     * 查询一段时间内的报警数
     *
     * @param deptIds
     * @param type
     * @param ruleType
     * @param startTime
     * @param endTime
     * @return
     */
    Integer countWarnNum(@Param("deptIds") List<Integer> deptIds,
                         @Param("type") Integer type,
                         @Param("ruleType") Integer ruleType,
                         @Param("startTime") Date startTime,
                         @Param("endTime") Date endTime);


    /**
     * 统计塔机报警数量
     *
     * @param craneId   塔机ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 报警数量
     */
    List<FseWarnCountDTO> countCraneWarn(@Param("craneId") Integer craneId,
                                         @Param("startTime") Date startTime,
                                         @Param("endTime") Date endTime);


    /**
     * 统计报警次数
     *
     * @param id        触发报警设备ID
     * @param type      报警设备类型
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 报警次数
     */
    Integer countDeviceWarnNum(@Param("id") Integer id,
                               @Param("type") Integer type,
                               @Param("startTime") Date startTime,
                               @Param("endTime") Date endTime);


    /**
     * 批量处理报警记录
     *
     * @param warnIdList
     * @param handleResult
     * @param handleRemark
     * @param userId
     * @param userName
     * @param phone
     */
    void batchUpdateState(@Param("warnIdList") List<Integer> warnIdList,
                          @Param("handleResult") String handleResult,
                          @Param("handleRemark") String handleRemark,
                          @Param("userId") Integer userId,
                          @Param("userName") String userName,
                          @Param("phone") String phone);

    /**
     * 批量删除报警记录
     *
     * @param warnIdList
     */
    void deleteLogic(@Param("warnIdList") List<Integer> warnIdList);
}